iT邦幫忙

2022 iThome 鐵人賽

DAY 17
0
自我挑戰組

30天建構出一個簡單 LineBot 機器人系列 第 17

DAY 17 Line 訊息的介紹

  • 分享至 

  • xImage
  •  

在 Line Bot 的撰寫上,搞清楚訊息很重要,清楚之後才能利用或是拿取到想要的資訊,因此在開始撰寫機器人之前要先了解 Line 裡面訊息的樣式、屬性以及提取方式。

這篇我們會複習以前的訊息類型,並講一下 Line 訊息的通用屬性,以便深入了解 Line 訊息讓未來使用上更得心應手。

Common properties(通用屬性)

通用屬性也就是每一則訊息不論格式都有的屬性,總共有六種:type、mode、timestamp、source、webhookEventId、deliveryContext.isRedelivery。

type(事件類型)

資料型態:String

前兩項的訊息會很常用的,可以先記得~

  • message(接收訊息)
  • postback (回傳訊息) 
  • unsend( 訊息無法傳送)
  • follow(被加好友)
  • unfollow(被封鎖)
  • join(Line Bot 加入群組或聊天室)
  • leave(Line Bot 離開群組或聊天室)
  • memberJoined(用戶加入群組或聊天室)
  • memberLeft(用戶離開群組或聊天室)
  • beacon(當用戶進入 Line Beacon 區域)
  • ...

mode(訊息狀態)

資料型態:String

  • active:頻道處於活動狀態,Line Bot 可以正常發送訊息。
  • standby:頻道處於等待狀態,Line Bot 不能回覆訊息。

timestamp(事件發生的時間,以毫秒計)

資料型態:Number

source(事件來源)

資料型態:Object

  • user
  • group chat
  • multi-person chat
type userId groupId roomId
user User 使用者代碼
group chat group 使用者代碼,只包含在 Message event 中 群組代碼
multi-person chat room 使用者代碼,只包含在 Message event 中 聊天室代碼

webhookEventId(Webhook 被觸發時產生的事件代碼)

資料型態:String

deliveryContext.isRedelivery(Webhook 再次傳遞與否)

資料型態:Boolean

  • true: 再次傳送 Webhook 事件
  • false: 第一次 Webhook 事件成功傳遞

Message event

  • type(類型):message
  • replyToken(訊息回應使用的 Token)
  • message(訊息物件) [DAY 8] 有介紹
    • Text
    • Image
    • Video
    • Audio
    • File
    • Location
    • Sticker

Text

當有文字訊息發出時會出現以下屬性資料。

  • id:訊息ID
  • type:text
  • text:訊息中包含的文字
    • 假設訊息最後為表情貼,則會以表情貼的文字儲存在此,例如:(love);如果是 @somebody ,則會儲存 @somebody ,例如:@毛毛 ,但是並不能儲存 @all 指命。
    • events[0].message.text:獲取第一則訊息的文字內容。
      為甚麼可以這樣拿取呢,這就要從 Line 訊息包裝的 json 來看了。從底下的文件可以看到, text 位在 "events" 下 "message" 裡的 "text" ,因此可以透過此語法獲取資料(以下訊息拿取方式以次類推)。
{
  "destination": "xxxxxxxxxx",
  "events": [
    {
      "replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
      "type": "message",
      "mode": "active",
      "timestamp": 1462629479859,
      "source": {
        "type": "user",
        "userId": "U4af4980629..."
      },
      "webhookEventId": "01FZ74A0TDDPYRVKNK77XKC3ZR",
      "deliveryContext": {
        "isRedelivery": false
      },
      "message": {
        "id": "325708",
        "type": "text",
        "text": "@example Hello, world! (love)",
        "emojis": [
          {
            "index": 23,
            "length": 6,
            "productId": "5ac1bfd5040ab15980c9b435",
            "emojiId": "001"
          }
        ],
        "mention": {
          "mentionees": [
            {
              "index": 0,
              "length": 8,
              "userId": "U850014438e..."
            }
          ]
        }
      }
    }
  ]
}
  • emojis:當有使用一個以上的表情貼時就會出現。
  • mention:當 @somebody 時才會出現。

Image

  • id:訊息ID
  • type:image
  • contentProvider.type:誰提供照片
    • line
    • external:透過程式發送( liff 設定)
  • contentProvider.originalContentUrl:照片的連結。
    當照片是程式發送時才有。
  • contentProvider.previewImageUrl:圖片預覽連結。
  • imageSet.id:圖片包的ID。
  • imageSet.index:在照片包的第幾個,從 1 開始。
  • imageSet.total:照片包裡的照片總數。

Video

  • id:訊息ID
  • type:vedio
  • duration:影片長度(毫秒)。
  • contentProvider.type:提供者
  • contentProvider.originalContentUrl:影片連結。
  • contentProvider.previewImageUrl:影片預覽連結。

Audio

  • id:訊息ID
  • type:Audio
  • duration:影片長度(毫秒)。
  • contentProvider.type:提供者。
  • contentProvider.originalContentUrl:音檔連結。

File

  • id:使訊息ID
  • type::file
  • fileName:檔案名稱。
  • fileSize:檔案大小(bytes)。

Location

  • id:訊息ID
  • type:location
  • title:地點名稱。
  • address:地址。
  • latitude:緯度。
  • longitude:經度。

Sticker

  • id:訊息ID
  • type:sticker
  • packageId:貼圖包ID。
  • stickerId:貼圖ID。
  • stickerResourceType
    • STATIC: 靜態貼圖
    • ANIMATION: 動態貼圖
    • SOUND: 有聲音的靜態貼圖
    • ANIMATION_SOUND: 有聲音的動態貼圖
    • POPUP: 全螢幕貼圖或特效貼圖
    • POPUP_SOUND: 有聲音的全螢幕貼圖或特效貼圖
    • CUSTOM: 使用者可以輸入文字的貼圖
    • ...
      資料來源:官方文件

接下來下一篇會來介紹 Postback event,並做簡單範例喔(❛◡❛✿)!


上一篇
DAY 16 Django資料庫使用(下篇)
下一篇
DAY 18 Postback event
系列文
30天建構出一個簡單 LineBot 機器人30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言